]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspace: Update background on workarea changes
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Mon, 15 Feb 2021 20:35:24 +0000 (17:35 -0300)
committerMarge Bot <marge-bot@gnome.org>
Sun, 21 Feb 2021 15:47:12 +0000 (15:47 +0000)
The WorkspaceBackground class has specific code to clip the background
to the workarea. However, it doesn't monitor for workarea changes, which
means it cannot react after being created.

Connect to 'workareas-changed', and update the workarea, the radius bounds,
and relayout when workareas change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1691>

js/ui/workspace.js

index 403c5dded005988e5cae4e842c6b51fd18d8faaf..fd5d57f4c5d5bc84d8c64541ffde72347233c35a 100644 (file)
@@ -905,9 +905,29 @@ class WorkspaceBackground extends St.Widget {
             useContentSize: false,
         });
 
+        this._workareasChangedId =
+            global.display.connect('workareas-changed', () => {
+                this._workarea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
+                this._updateRoundedClipBounds();
+                this.queue_relayout();
+            });
+        this._updateRoundedClipBounds();
+
         this.connect('destroy', this._onDestroy.bind(this));
     }
 
+    _updateRoundedClipBounds() {
+        const monitor = Main.layoutManager.monitors[this._monitorIndex];
+
+        const rect = new Graphene.Rect();
+        rect.origin.x = this._workarea.x - monitor.x;
+        rect.origin.y = this._workarea.y - monitor.y;
+        rect.size.width = this._workarea.width;
+        rect.size.height = this._workarea.height;
+
+        this._bgManager.backgroundActor.content.set_rounded_clip_bounds(rect);
+    }
+
     vfunc_allocate(box) {
         this.set_allocation(box);
 
@@ -923,14 +943,6 @@ class WorkspaceBackground extends St.Widget {
         const yOff = (contentHeight / this._workarea.height) *
             (this._workarea.y - monitor.y);
 
-        const rect = new Graphene.Rect();
-        rect.origin.x = this._workarea.x - monitor.x;
-        rect.origin.y = this._workarea.y - monitor.y;
-        rect.size.width = this._workarea.width;
-        rect.size.height = this._workarea.height;
-
-        this._bgManager.backgroundActor.content.set_rounded_clip_bounds(rect);
-
         contentBox.x1 -= xOff;
         contentBox.y1 -= yOff;
         contentBox.set_size(xOff + contentWidth, yOff + contentHeight);
@@ -942,6 +954,11 @@ class WorkspaceBackground extends St.Widget {
             this._bgManager.destroy();
             this._bgManager = null;
         }
+
+        if (this._workareasChangedId) {
+            global.display.disconnect(this._workareasChangedId);
+            delete this._workareasChangedId;
+        }
     }
 
     set cornerRadius(radius) {